#![no_std]
#![no_main]

extern crate panic_halt;

use cortex_m_rt::entry;
use stm32f1::stm32f103;

#[entry]
fn main() -> ! {
    let stm32_per = stm32f103::Peripherals::take().unwrap();
    // 开启 GPIO_B 和 GPIO_E 的时钟
    stm32_per.RCC.apb2enr.write(|w| w.iopben().enabled().iopeen().enabled());
    // 设置 PB5 和 PE5 为开漏输出
    stm32_per.GPIOB.crl.write(|w| w.mode5().output().cnf5().open_drain());
    stm32_per.GPIOE.crl.write(|w| w.mode5().output().cnf5().open_drain());
    // 设置 PB5 对应的 LED 先亮（LED 已事先接入 VCC）
    stm32_per.GPIOB.odr.write(|w| w.odr5().low());
    stm32_per.GPIOE.odr.write(|w| w.odr5().high());
    // 循环交替闪烁
    loop {
        stm32_per.GPIOB.odr.modify(|r, w| w.odr5().bit(!r.odr5().bit()));
        stm32_per.GPIOE.odr.modify(|r, w| w.odr5().bit(!r.odr5().bit()));
        cortex_m::asm::delay(2000000);
    }
}
